package h0730;

import java.util.Scanner;
/**
  * @description 游戏分组。这道题类似 TODO 篮球比赛
  * @author 不知名帅哥
  * @date 2024/7/30 20:56
  * @version 1.0
*/
public class GameGroup2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] scores = new int[10];
        for (int i = 0; i < 10; i++) {
            scores[i] = scanner.nextInt();
        }
        scanner.close();

        System.out.println(minimumDifference(scores));
    }

    public static int minimumDifference(int[] scores) {
        int totalSum = 0;
        for (int score : scores) {
            totalSum += score;
        }

        int halfSum = totalSum / 2;
        //dp数组表示前i个人能否达到j。
        boolean[][] dp = new boolean[11][halfSum + 1];
        dp[0][0] = true;

        for (int i = 1; i <= 10; i++) {
            for (int j = 0; j <= halfSum; j++) {
                dp[i][j] = dp[i - 1][j];  //如果不选当前人的评分
                if (j >= scores[i - 1]) {
                    //TODO 这里是如果当前的j大于等于当前人的评分，选当前人的情况。
                    // 那么既然要选当前人，就要判断（j-当前人的评分）的dp数组是否为真。将括号这个看作一个整体好理解一点。
                    dp[i][j] = dp[i][j] || dp[i - 1][j - scores[i - 1]];
                }
            }
        }

        int closestSum = 0;
        for (int j = halfSum; j >= 0; j--) {
            if (dp[10][j]) {
                closestSum = j;
                break;
            }
        }

        int otherSum = totalSum - closestSum;
        return Math.abs(otherSum - closestSum);
    }
}
